Existing computing systems, as for example a multi-processor, shared memory system as disclosed in U.S. patent application Ser. No. 08/774,548 entitled "Shared Memory Control Algorithm for Mutual Exclusion and Rollback" filed Dec. 30, 1996 naming Brian Baker and Terry Newell as inventors, and incorporated herein by reference, effect certain permanent system changes in "transactions". In this system, multiple processors execute processes that may modify shared memory. Memory changes made by a process executing on a processor do not permanently affect the shared memory until the process successfully completes. During process execution, memory used by a process is "owned" by that process; read and write access by other processes is locked out. If a process does not successfully complete or attempts to access memory owned by another process, the process is aborted and memory affected by the process is "rolled back" to its previous state. Memory changes are only made permanent (or "committed") upon successful process completion. In this context, "transactions" may be considered those intervals between initial system accesses that may ultimately permanently affect the system state, and the "committal" of the state changes to the system. This shared memory system is referred to as a transactional system.
By contrast, conventional computing systems effect permanent state changes at any time. These systems may be considered "non-transactional systems".
Notwithstanding the use of transactions to permanently cause changes to shared memory in the above described computing system, irreversible events continue to affect the state of the system. These events are said to be "non-transactional" and are unique and non-repeatable. Examples of such events include hardware state changes; communications with non-transactional systems; and processor interrupts or exceptions. Ideally, state changes caused by non-transactional events should coincide with permanent state changes effected in any transactional system.
In order to avoid the effect of exceptions, these could simply be blocked from occurring. Data normally provided by the exceptions would be provided and collected by the base (ie. non-exception) processes. However, blocking all exceptions would severely impact overall system performance. This impact on overall performance would be exacerbated in a multi-processor system. Moreover, by its very nature, the locking out of transactions in a real time system would be impossible. A real time system must be able to immediately react to events, including exceptions.
Another approach might utilize a simple buffer formed in memory to transfer data between exception and base levels. Critical sections of data are preserved by software system exclusion primitives. However, unlike in the above described transactional shared memory system, the rollback of memory altered as a result of a process would not be possible.
As should be apparent, a method of handling exceptions within a transactional system that allows for memory rollback and minimal blocking is desirable.